#!/bin/bash

# 获取当前系统的架构
function get_arch() {
    arch=$(uname -m | tr '[:upper:]' '[:lower:]')

    case "$arch" in
        x86_64)
            echo "x64"
            ;;
        arm64|aarch64)
            echo "arm64"
            ;;
        *)
            echo "$arch"
            ;;
    esac
}

# 获取当前platform: linux, darwin
PLATFORM=$(uname -s | tr '[:upper:]' '[:lower:]')

# 获取当前arch: x64, x86, arm64
ARCH=$(get_arch)

# 输出当前系统信息
echo -e "当前系统信息: \n"
echo -e "platform: $PLATFORM, arch: $ARCH \n"

# 判断当前架构是否为支持的x64、arm64架构，不支持的话输出错误信息并退出
if [ "$ARCH" != "x64" ] && [ "$ARCH" != "arm64" ]; then
    echo -e "不支持的架构: $ARCH \n 退出... \n"
    exit 1
fi

# 输出多行注意事项
sudo date
echo -e "\033[31m \n⚠️  注意事项: \n 

1. 请确保当前已经安装了docker, 如果需要推送到仓库, 请确认已经登录docker仓库 [hub.shinevv.com]。 \n 

2. 本脚本只支持x64、arm64架构的镜像构建。 \n

3. 脚本将自动copy当前架构下的打包好的当前架构的应用程序到当前目录。镜像构建完成后会自动删除。 \n
\033[0m"

echo "按任意键继续..."
read -n 1 -s -r key

# # 请输入版本号
# echo -e "请输入版本号，格式如 1.0.0 : \n"
# read version

echo -e "开始构建镜像... \n"
echo -e "platform: $PLATFORM, arch: $ARCH \n"

echo -e "复制应用程序... \n"
set -ex
cp ../libuv_shared.so ./
cp ../libworker_ssl.so ./
cp ../libwsconnection.so ./
cp ../${PLATFORM}_${ARCH}_server ./
cp ../${PLATFORM}_x64_server.json ./
cp -r ../cert ./
chmod +x ./${PLATFORM}_${ARCH}_server
echo "复制完成。"
set +ex

# 获取应用程序版本号，用于镜像版本号, -v 参数为应用程序的版本号
version=$(./${PLATFORM}_${ARCH}_server -v)
echo -e "\033[32m \n - - - - - - - - - 当前应用程序版本号: $version ,该版本号将作为镜像版本号 - - - - - - - - - -   \n\033[0m\n"

# 询问是否继续使用该版本号作为镜像版本号并继续执行
echo "是否继续使用该版本号[$version]作为镜像版本号并继续执行？[y/N]"
read choice

# 如果choice=y or Y继续执行，否则退出
if [ "$choice" != "y" ] && [ "$choice" != "Y" ]; then
    echo -e "退出... \n"
    exit 0
fi

echo -e "构建镜像... \n"
# 根据不同ARCH，使用不同的Dockerfile, x64使用无后缀镜像名称，arm64使用-arm后缀镜像名称。
if [ "$ARCH" == "x64" ]; then
    sudo docker build -t hub.shinevv.com/vvclass/mediaserver:${version} -f Dockerfile.x64 .
elif [ "$ARCH" == "arm64" ]; then
    sudo docker build -t hub.shinevv.com/vvclass/mediaserver-arm:${version} -f Dockerfile.arm64 .
else
    echo -e "不支持的架构: $ARCH \n 退出... \n"
    exit 1
fi

echo -e "删除应用程序... \n"
set -ex
rm -rf ./libuv_shared.so
rm -rf ./libworker_ssl.so
rm -rf ./libwsconnection.so
rm -rf ./${PLATFORM}_${ARCH}_server
rm -rf ./${PLATFORM}_x64_server.json
rm -rf ./cert
set +ex

echo -e "镜像构建完成。\n"
echo "是否推送镜像到仓库？[y/N]"
read choice

if [ "$choice" == "y" ] && [ "$choice" == "Y" ]; then
    if [ "$ARCH" == "x64" ]; then
        sudo docker push hub.shinevv.com/vvclass/mediaserver:${version}
    elif [ "$ARCH" == "arm64" ]; then
        sudo docker push hub.shinevv.com/vvclass/mediaserver-arm:${version}
    fi
    echo -e "✅镜像推送完成，退出...\n"
else
    echo -e "✅镜像构建结束，退出...\n"
    exit 0
fi